Skip to main content

Basic Tween

  • basic properties
GSAPCSSdescription
x: 100transform: translateX(100px)X축으로 100px만큼 이동
y: 100transform: translateY(100px)Y축으로 100px만큼 이동
rotation: 360transform: rotate(360deg)360도 회전
rotationX: 360transform: rotateX(360deg)X축으로 360도 회전
rotationY: 360transform: rotateY(360deg)Y축으로 360도 회전
skewX: 45transform: skewX(45deg)X축으로 45도 기울임
skewY: 45transform: skewY(45deg)Y축으로 45도 기울임
scale:2transform: scale(2, 2)크기 2배 증가
scaleX: 2transform: scaleX(2)X축으로 크기 2배 증가
scaleY: 2transform: scaleY(2)Y축으로 크기 2배 증가
xPercent: 50transform: translateX(50%)현재 위치에서 X축으로 50% 만큼 이동
yPercent: 50transform: translateY(50%)현재 위치에서 Y축으로 50% 만큼 이동
duration: 3transition: all 3s3초 동안 실행, default: 0.5초
opacity: 0opacity: 0투명도 100%
width: 100width: 100px가로 길이를 100px만큼 설정
height: 100height: 100px세로 길이를 100px만큼 설정
backgroundColor: 'red'backgroundColor: 'red'background color를 'red'로 변경
color: 'red'color: 'red'font color를 'red' 로 변경
padding: 100padding: 100px안쪽 여백을 100px만큼 설정
padding: '10 20 30 40'padding: 10px 20px 30px 40px안쪽 여백을 상: 10px, 우: 20px, 하: 30px, 좌: 40px만큼 설정
paddingTop: 10padding-top: 10px안쪽 상측 여백을 10px만큼 설정
paddingBottom: 10padding-bottom: 10px안쪽 하측 여백을 10px만큼 설정
paddingLeft: 10padding-left: 10px안쪽 좌측 여백을 10px만큼 설정
paddingRight: 10padding-right: 10px안쪽 우측 여백을 10px만큼 설정
margin: 10margin: 10px바깥쪽 여백을 10px만큼 설정
margin: '10 20 30 40'margin: 10px 20px 30px 40px바깥쪽 여백을 상: 10px, 우: 20px, 하: 30px, 좌: 40px만큼 설정
marginTop: 10margin-top: 10px바깥쪽 상측 여백을 10px만큼 설정
marginBottom: 10margin-bottom: 10px바깥쪽 하측 여백을 10px만큼 설정
marginLeft: 10margin-left: 10px바깥쪽 좌측 여백을 10px만큼 설정
marginRight: 10margin-right: 10px바깥쪽 우측 여백을 10px만큼 설정

GSAP은 사용자가 설정한 모든 숫자 속성에 대해 애니메이션을 적용할 수 있다.

  • 100 (100px)
  • 100px
  • 100em
  • 100rem
  • 100vh and vw
  • 100%
브라우저 성능을 고려한다면

브라우저 성능을 최대치로 끌어올리기 위해선 CSS TransformOpacity만을 사용하여 애니메이션을 구현하는걸 권장한다. CSS Transform과 Opacity는 애니메이션을 위해 최적화되어 있는 코드이고 GPU를 사용하는 장점이 있다. left, margin, padding, width/height 조절 등을 사용하게 되면 브라우저가 페이지 레이아웃을 다시 리렌더링(re-render)하기 때문에 브라우저 성능이 저하될 수 있다.


  • special properties
GSAPCSSdescription
repeat: 3직접적인 CSS 속성 사용 불가animation-iteration-count: 4애니메이션을 3번 반복
repeat: -1animation-iteration-count: infinite애니메이션 무한 반복
delay: 3animation-delay: 2s최초 애니메이션이 실행 대기 시간 3초
crepeatDelay: 2CSS 속성 사용 불가애니메이션 반복 대기 시간 2초
rotationX: 360transform: rotateX(360deg)X축으로 360도 회전
yoyo: trueanimation-direction: alternate현재 위치에서 지정한 위치까지 이동 후 다시 현재 위치로 되돌아오는 애니메이션 반복

gsap.to

원래 위치에서 지정한 값(위치)으로 이동하는 애니메이션이다.

  • 기본 구문
gsap.to('class, tag', { properties });

// ex) class
gsap.to('.box', { properties });

// ex) tag
gsap.to('h1', { properties });

from()

지정한 값(위치)에서 부터 원래의 위치로 되돌아오는 애니메이션이다.

  • 기본 구문
gsap.from('.orange', { x: 400, y: 500 });

fromTo()

지정한 값(2번째 파라미터)에서 지정한 값으로(3번째 파라미터)로 이동하는 애니메이션이다.

  • 기본 구문
gsap.fromTo('orange', { x: 400, y: 500 }, { x: 200, y: 200 });

코드에서 사용된 2개의 객체는 from vars와 to vars로 작동된다.

ease

애니메이션에 가속도를 주는 property이며 기본 값은 ease: 'power1.out' 이며 모든 property는 out이 기본 값이다.
GSAP에서는 애니메이션을 위해 사용하기도 하지만 레이아웃, 오브젝트간의 간격을 주기 위해 사용된다.

GSAPdescription
iease: 'method.inOut'in -> Out -> in 순서대로 동작
ease: 'none' or linear'등속도 운동
ease: 'power1'부드럽게 시작해서 부드럽게 끝나는 기본적인 가속도 운동
ease: 'power1.in'훨씬 빠르게 가속
ease: 'power2'빠르게 가속한 후 부드럽게 감속하는 효과
ease: 'power2.in'훨씬 빠르게 가속
ease: 'power3'power2보다 빠르게 가속한 후 부드럽게 감속하는 효과
ease: 'power3.in'훨씬 빠르게 가속
ease: 'power4'power3보다 빠르게 가속한 후 부드럽게 감속하는 효과
ease: 'power4.in'훨씬 빠르게 가속
ease: 'back'지정한 위치보다 더 멀리 이동 후 다시 지정한 위치로 복귀하는 효과
ease: 'back.in'원래 위치에서 뒤로 살짝 갔다가 빠르게 가속
ease: 'bounce'지정한 위치로 여러 번 튕긴 후 도달하는 효과
ease: 'bounce.in'시작 지점에서 여러 번 튕긴 후 지정한 위치로 이동
ease: 'circ'원형 곡선을 따라 이동하는 효과
ease: 'circ.in'원형 곡선을 따라 가속
ease: 'elastic'고무줄처럼 탄성을 주며 튕기는 효과
ease: 'elastic.in'고무줄처럼 탄성을 가하는 준비 운동 후 지정한 위치로 가속
ease: 'expo'아주 빠르게 움직인 후 느리게 멈춤
ease: 'expo.in'아주 느리게 시작한 후 빠르게 멈춤
ease: 'sine'sin 기반의 자연스러운 감속
ease: 'sine.in'자연스러운 가속
ease: 'steps(n)'애니메이션을 n단계로 나누어 진행 (스프라이트 애니메이션)

stagger

단일 Tween에서 여러 대상의 시작 시간을 오프셋 설정하여 다중 요소를 제어 가능하다.

<body>
<div class="stage">
<div class="orange"></div>
<div class="pink"></div>
<div class="green"></div>
<div class="red"></div>
<div class="blue"></div>
</div>
</body>

<script>
gsap.to('.orange', { x: 100 });
gsap.to('.pink', { x: 100, delay: 0.3 });
gsap.to('.green', { x: 100, delay: 0.6 });
gsap.to('.red', { x: 100, delay: 0.9 });
gsap.to('.blue', { x: 100, delay: 1.2 });
</script>
  • 이 경우 객체가 더 많을 경우 delay을 일일이 전부 다 수정해주어야 한다.
  • 이러한 기능은 CSS 속성에서 지원하지 않는다.

  • 기본 구문
<body>
<div class="stage">
<div class="orange box"></div>
<div class="pink box"></div>
<div class="green box"></div>
<div class="red box"></div>
<div class="blue box"></div>
</div>
</body>

<script>
gsap.to('.box', { x: 100, stagger: 0.3 });
</script>
  • 각 box class를 가진 오브젝트들이 순차적으로 delay를 0.3초씩 가지며 실행된다.

  • properties

GSAPdescription
stagger: 0.30.3초의 delay를 가지며 다중 요소가 순차적으로 실행
stagger: { each: 0.3 }기본 값, 각 요소의 시작 사이에 0.3초의 대기 시간 적용 (stagger: 0.3과 동일)
stagger: { amount: 1.0 }다중 요소가 1초를 각각 나누어 1초만에 모든 애니메이션이 순차적으로 실행
stagger: {from: 'value'}number: 해당 index의 오브젝트부터 실행,
'center': 요소의 가운데 index부터 실행
end': 요소의 마지막 index부터 실행
'edges': 요소의 양쪽 끝 index부터 실행

twin Control

tween 애니메이션을 제어할 수 있는 method이다.

  • 기본 구문 (HTML)
// 기본 구문
let tween = gsap.to('target', { x: 500 });

// property로 기본 재생을 중지 상태로 만들 수도 있다.
let tween = gsap.to('target', { x: 500, paused: true });

// DOM
document.querySelector('target').addEventListener('click', () => {
tween.methods();
});
  • 기본 구문 (React)
xport default function App() {
const container = useRef();

// twin을 Control할 오브젝트 Ref
const boxRef = useRef();

// twin method 제어 Ref
const tweenRef = useRef();

useGSAP(
() => {
tweenRef.current = gsap.to(boxRef.current, {
x: 500,
// paused: true // 기본 재생 중지 방법 1
});
tweenRef.current.pause(); // 기본 재생 중지 방법 2
},
{ scope: container }
);

const onControlBox = (control) => {
control === 'play' && tweenRef.current.play();
control === 'pause' && tweenRef.current.pause();
control === 'resume' && tweenRef.current.resume();
control === 'reverse' && tweenRef.current.reverse();
control === 'restart' && tweenRef.current.restart();
};

return (
<div ref={container}>
<div ref={boxRef} className='orange'></div>

<button onClick={() => { onControlBox('play'); }} >
play
</button>
<button onClick={() => { onControlBox('pause'); }} >
pause
</button>
<button onClick={() => { onControlBox('resume'); }} >
resume
</button>
<button onClick={() => { onControlBox('reverse'); }} >
reverse
</button>
<button onClick={() => { onControlBox('restart'); }} >
restart
</button>
</div>
);
}
  • methods
GSAPdescription
twin.play()애니메이션 재생
twin.pause()애니메이션 중지
twin.resume()애니메이션 재개
twin.reverse()애니메이션 역재생
twin.restart()애니메이션 재실행